package com.arpa.wms.service;

import com.arpa.wms.domain.entity.Location;
import com.arpa.wms.domain.entity.ReceiveRegister;
import com.arpa.wms.domain.vo.ReceiveItemWithRegisterVO;

/**
 * 库内策略
 * 包含上架推荐策略，库存分配策略等
 * @author liuxr
 */
public interface WarehouseInternalStrategy {



    /**
     * 托盘上架推荐库位
     *     按托盘将每个托盘的商品推荐到同一个库位上；
     *     根据库位承载类型判断是否可以推荐，可推荐库位：
     *     a)
     *     b)库位承载类型可承载托盘数量>1且已存放托盘数量<可承载托盘数量；
     *     c)库位推荐限制：出入库锁：出库锁、不锁；
     *     d)库位推荐顺序：上架动线号从小到大，如果没有维护上架动线号，按照库位编码从
     *     小到大；
     * @param warehouseCode 仓库code
     * @return
     */
    Location recommendedLocationForPallet(String warehouseCode);


    /**
     * 商品混放上架库位推荐
     * @param warehouseCode 仓库code
     * @param receiveRegister 收货登记记录
     * @return
     */
    String recommendedLocationForMixedGoods(String warehouseCode, ReceiveRegister receiveRegister);

    /**
     * 推荐库位简易版
     * @return
     */
    Location simpleRecommendedLocation(String warehouseCode ,ReceiveItemWithRegisterVO item);

}
